home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / flight-of-the-museum.swf / scripts / com / google / analytics / v4 / Tracker.as < prev   
Encoding:
Text File  |  2011-10-17  |  28.6 KB  |  848 lines

  1. package com.google.analytics.v4
  2. {
  3.    import com.google.analytics.campaign.CampaignInfo;
  4.    import com.google.analytics.campaign.CampaignManager;
  5.    import com.google.analytics.core.BrowserInfo;
  6.    import com.google.analytics.core.Buffer;
  7.    import com.google.analytics.core.DocumentInfo;
  8.    import com.google.analytics.core.DomainNameMode;
  9.    import com.google.analytics.core.EventInfo;
  10.    import com.google.analytics.core.EventTracker;
  11.    import com.google.analytics.core.GIFRequest;
  12.    import com.google.analytics.core.ServerOperationMode;
  13.    import com.google.analytics.core.Utils;
  14.    import com.google.analytics.data.X10;
  15.    import com.google.analytics.debug.DebugConfiguration;
  16.    import com.google.analytics.debug.VisualDebugMode;
  17.    import com.google.analytics.external.AdSenseGlobals;
  18.    import com.google.analytics.utils.Environment;
  19.    import com.google.analytics.utils.Protocols;
  20.    import com.google.analytics.utils.URL;
  21.    import com.google.analytics.utils.Variables;
  22.    
  23.    public class Tracker implements GoogleAnalyticsAPI
  24.    {
  25.        
  26.       
  27.       private var _adSense:AdSenseGlobals;
  28.       
  29.       private const EVENT_TRACKER_LABEL_KEY_NUM:int = 3;
  30.       
  31.       private var _eventTracker:X10;
  32.       
  33.       private const EVENT_TRACKER_VALUE_VALUE_NUM:int = 1;
  34.       
  35.       private var _noSessionInformation:Boolean = false;
  36.       
  37.       private var _browserInfo:BrowserInfo;
  38.       
  39.       private var _debug:DebugConfiguration;
  40.       
  41.       private var _isNewVisitor:Boolean = false;
  42.       
  43.       private var _buffer:Buffer;
  44.       
  45.       private var _config:Configuration;
  46.       
  47.       private var _x10Module:X10;
  48.       
  49.       private var _campaign:CampaignManager;
  50.       
  51.       private var _formatedReferrer:String;
  52.       
  53.       private var _timeStamp:Number;
  54.       
  55.       private var _info:Environment;
  56.       
  57.       private var _domainHash:Number;
  58.       
  59.       private const EVENT_TRACKER_PROJECT_ID:int = 5;
  60.       
  61.       private var _campaignInfo:CampaignInfo;
  62.       
  63.       private const EVENT_TRACKER_OBJECT_NAME_KEY_NUM:int = 1;
  64.       
  65.       private var _gifRequest:GIFRequest;
  66.       
  67.       private const EVENT_TRACKER_TYPE_KEY_NUM:int = 2;
  68.       
  69.       private var _hasInitData:Boolean = false;
  70.       
  71.       private var _account:String;
  72.       
  73.       public function Tracker(account:String, config:Configuration, debug:DebugConfiguration, info:Environment, buffer:Buffer, gifRequest:GIFRequest, adSense:AdSenseGlobals)
  74.       {
  75.          var msg:* = null;
  76.          super();
  77.          _account = account;
  78.          _config = config;
  79.          _debug = debug;
  80.          _info = info;
  81.          _buffer = buffer;
  82.          _gifRequest = gifRequest;
  83.          _adSense = adSense;
  84.          if(!Utils.validateAccount(account))
  85.          {
  86.             msg = "Account \"" + account + "\" is not valid.";
  87.             _debug.warning(msg);
  88.             throw new Error(msg);
  89.          }
  90.          _initData();
  91.       }
  92.       
  93.       private function _doTracking() : Boolean
  94.       {
  95.          if(_info.protocol != Protocols.file && _info.protocol != Protocols.none && _isNotGoogleSearch())
  96.          {
  97.             return true;
  98.          }
  99.          if(_config.allowLocalTracking)
  100.          {
  101.             return true;
  102.          }
  103.          return false;
  104.       }
  105.       
  106.       public function addOrganic(newOrganicEngine:String, newOrganicKeyword:String) : void
  107.       {
  108.          _debug.info("addOrganic( " + [newOrganicEngine,newOrganicKeyword].join(", ") + " )");
  109.          _config.organic.addSource(newOrganicEngine,newOrganicKeyword);
  110.       }
  111.       
  112.       public function setAllowLinker(enable:Boolean) : void
  113.       {
  114.          _config.allowLinker = enable;
  115.          _debug.info("setAllowLinker( " + _config.allowLinker + " )");
  116.       }
  117.       
  118.       public function trackEvent(category:String, action:String, label:String = null, value:Number = NaN) : Boolean
  119.       {
  120.          var success:Boolean = true;
  121.          var params:int = 2;
  122.          if(category != "" && action != "")
  123.          {
  124.             _eventTracker.clearKey(EVENT_TRACKER_PROJECT_ID);
  125.             _eventTracker.clearValue(EVENT_TRACKER_PROJECT_ID);
  126.             success = _eventTracker.setKey(EVENT_TRACKER_PROJECT_ID,EVENT_TRACKER_OBJECT_NAME_KEY_NUM,category);
  127.             success = _eventTracker.setKey(EVENT_TRACKER_PROJECT_ID,EVENT_TRACKER_TYPE_KEY_NUM,action);
  128.             if(Boolean(label) && label != "")
  129.             {
  130.                success = _eventTracker.setKey(EVENT_TRACKER_PROJECT_ID,EVENT_TRACKER_LABEL_KEY_NUM,label);
  131.                params = 3;
  132.                if(!isNaN(value))
  133.                {
  134.                   success = _eventTracker.setValue(EVENT_TRACKER_PROJECT_ID,EVENT_TRACKER_VALUE_VALUE_NUM,value);
  135.                   params = 4;
  136.                }
  137.             }
  138.             if(success)
  139.             {
  140.                _debug.info("valid event tracking call\ncategory: " + category + "\naction: " + action,VisualDebugMode.geek);
  141.                _sendXEvent(_eventTracker);
  142.             }
  143.          }
  144.          else
  145.          {
  146.             _debug.warning("event tracking call is not valid, failed!\ncategory: " + category + "\naction: " + action,VisualDebugMode.geek);
  147.             success = false;
  148.          }
  149.          switch(params)
  150.          {
  151.             case 4:
  152.                _debug.info("trackEvent( " + [category,action,label,value].join(", ") + " )");
  153.                break;
  154.             case 3:
  155.                _debug.info("trackEvent( " + [category,action,label].join(", ") + " )");
  156.                break;
  157.             case 2:
  158.             default:
  159.                _debug.info("trackEvent( " + [category,action].join(", ") + " )");
  160.          }
  161.          return success;
  162.       }
  163.       
  164.       public function trackPageview(pageURL:String = "") : void
  165.       {
  166.          _debug.info("trackPageview( " + pageURL + " )");
  167.          if(_doTracking())
  168.          {
  169.             _initData();
  170.             _trackMetrics(pageURL);
  171.             _noSessionInformation = false;
  172.          }
  173.          else
  174.          {
  175.             _debug.warning("trackPageview( " + pageURL + " ) failed");
  176.          }
  177.       }
  178.       
  179.       public function setCookieTimeout(newDefaultTimeout:int) : void
  180.       {
  181.          _config.conversionTimeout = newDefaultTimeout;
  182.          _debug.info("setCookieTimeout( " + _config.conversionTimeout + " )");
  183.       }
  184.       
  185.       public function trackTrans() : void
  186.       {
  187.          _debug.warning("trackTrans() not implemented");
  188.       }
  189.       
  190.       public function setClientInfo(enable:Boolean) : void
  191.       {
  192.          _config.detectClientInfo = enable;
  193.          _debug.info("setClientInfo( " + _config.detectClientInfo + " )");
  194.       }
  195.       
  196.       public function linkByPost(formObject:Object, useHash:Boolean = false) : void
  197.       {
  198.          _debug.warning("linkByPost( " + [formObject,useHash].join(", ") + " ) not implemented");
  199.       }
  200.       
  201.       private function _initData() : void
  202.       {
  203.          var data0:* = null;
  204.          var data:* = null;
  205.          if(!_hasInitData)
  206.          {
  207.             _updateDomainName();
  208.             _domainHash = _getDomainHash();
  209.             _timeStamp = Math.round(new Date().getTime() / 1000);
  210.             if(_debug.verbose)
  211.             {
  212.                data0 = "";
  213.                data0 += "_initData 0";
  214.                data0 += "\ndomain name: " + _config.domainName;
  215.                data0 += "\ndomain hash: " + _domainHash;
  216.                data0 += "\ntimestamp:   " + _timeStamp + " (" + new Date(_timeStamp * 1000) + ")";
  217.                _debug.info(data0,VisualDebugMode.geek);
  218.             }
  219.          }
  220.          if(_doTracking())
  221.          {
  222.             _handleCookie();
  223.          }
  224.          if(!_hasInitData)
  225.          {
  226.             if(_doTracking())
  227.             {
  228.                _formatedReferrer = _formatReferrer();
  229.                _browserInfo = new BrowserInfo(_config,_info);
  230.                _debug.info("browserInfo: " + _browserInfo.toURLString(),VisualDebugMode.advanced);
  231.                if(_config.campaignTracking)
  232.                {
  233.                   _campaign = new CampaignManager(_config,_debug,_buffer,_domainHash,_formatedReferrer,_timeStamp);
  234.                   _campaignInfo = _campaign.getCampaignInformation(_info.locationSearch,_noSessionInformation);
  235.                   _debug.info("campaignInfo: " + _campaignInfo.toURLString(),VisualDebugMode.advanced);
  236.                }
  237.             }
  238.             _x10Module = new X10();
  239.             _eventTracker = new X10();
  240.             _hasInitData = true;
  241.          }
  242.          if(_config.hasSiteOverlay)
  243.          {
  244.             _debug.warning("Site Overlay is not supported");
  245.          }
  246.          if(_debug.verbose)
  247.          {
  248.             data = "";
  249.             data += "_initData (misc)";
  250.             data += "\nflash version: " + _info.flashVersion.toString(4);
  251.             data += "\nprotocol: " + _info.protocol;
  252.             data += "\ndefault domain name (auto): \"" + _info.domainName + "\"";
  253.             data += "\nlanguage: " + _info.language;
  254.             data += "\ndomain hash: " + _getDomainHash();
  255.             data += "\nuser-agent: " + _info.userAgent;
  256.             _debug.info(data,VisualDebugMode.geek);
  257.          }
  258.       }
  259.       
  260.       public function getDetectTitle() : Boolean
  261.       {
  262.          _debug.info("getDetectTitle()");
  263.          return _config.detectTitle;
  264.       }
  265.       
  266.       public function resetSession() : void
  267.       {
  268.          _debug.info("resetSession()");
  269.          _buffer.resetCurrentSession();
  270.       }
  271.       
  272.       public function getClientInfo() : Boolean
  273.       {
  274.          _debug.info("getClientInfo()");
  275.          return _config.detectClientInfo;
  276.       }
  277.       
  278.       private function _sendXEvent(opt_xObj:X10 = null) : void
  279.       {
  280.          var searchVariables:Variables = null;
  281.          var eventInfo:EventInfo = null;
  282.          var eventvars:Variables = null;
  283.          var generalvars:Variables = null;
  284.          _initData();
  285.          if(_takeSample())
  286.          {
  287.             searchVariables = new Variables();
  288.             searchVariables.URIencode = true;
  289.             eventInfo = new EventInfo(true,_x10Module,opt_xObj);
  290.             eventvars = eventInfo.toVariables();
  291.             generalvars = _renderMetricsSearchVariables();
  292.             searchVariables.join(eventvars,generalvars);
  293.             _gifRequest.send(_account,searchVariables,false,true);
  294.          }
  295.       }
  296.       
  297.       public function setDetectFlash(enable:Boolean) : void
  298.       {
  299.          _config.detectFlash = enable;
  300.          _debug.info("setDetectFlash( " + _config.detectFlash + " )");
  301.       }
  302.       
  303.       public function setCampNameKey(newCampNameKey:String) : void
  304.       {
  305.          _config.campaignKey.UCCN = newCampNameKey;
  306.          var msg:* = "setCampNameKey( " + _config.campaignKey.UCCN + " )";
  307.          if(_debug.mode == VisualDebugMode.geek)
  308.          {
  309.             _debug.info(msg + " [UCCN]");
  310.          }
  311.          else
  312.          {
  313.             _debug.info(msg);
  314.          }
  315.       }
  316.       
  317.       private function _formatReferrer() : String
  318.       {
  319.          var domainName:String = null;
  320.          var ref:URL = null;
  321.          var dom:URL = null;
  322.          var referrer:String = _info.referrer;
  323.          if(referrer == "" || referrer == "localhost")
  324.          {
  325.             referrer = "-";
  326.          }
  327.          else
  328.          {
  329.             domainName = _info.domainName;
  330.             ref = new URL(referrer);
  331.             dom = new URL("http://" + domainName);
  332.             if(ref.hostName == domainName)
  333.             {
  334.                return "-";
  335.             }
  336.             if(dom.domain == ref.domain)
  337.             {
  338.                if(dom.subDomain != ref.subDomain)
  339.                {
  340.                   referrer = "0";
  341.                }
  342.             }
  343.             if(referrer.charAt(0) == "[" && Boolean(referrer.charAt(referrer.length - 1)))
  344.             {
  345.                referrer = "-";
  346.             }
  347.          }
  348.          _debug.info("formated referrer: " + referrer,VisualDebugMode.advanced);
  349.          return referrer;
  350.       }
  351.       
  352.       private function _visitCode() : Number
  353.       {
  354.          if(_debug.verbose)
  355.          {
  356.             _debug.info("visitCode: " + _buffer.utma.sessionId,VisualDebugMode.geek);
  357.          }
  358.          return _buffer.utma.sessionId;
  359.       }
  360.       
  361.       public function createEventTracker(objName:String) : EventTracker
  362.       {
  363.          _debug.info("createEventTracker( " + objName + " )");
  364.          return new EventTracker(objName,this);
  365.       }
  366.       
  367.       public function addItem(item:String, sku:String, name:String, category:String, price:Number, quantity:int) : void
  368.       {
  369.          _debug.warning("addItem( " + [item,sku,name,category,price,quantity].join(", ") + " ) not implemented");
  370.       }
  371.       
  372.       public function clearIgnoredOrganic() : void
  373.       {
  374.          _debug.info("clearIgnoredOrganic()");
  375.          _config.organic.clearIgnoredKeywords();
  376.       }
  377.       
  378.       public function setVar(newVal:String) : void
  379.       {
  380.          var variables:Variables = null;
  381.          if(newVal != "" && _isNotGoogleSearch())
  382.          {
  383.             _initData();
  384.             _buffer.utmv.domainHash = _domainHash;
  385.             _buffer.utmv.value = newVal;
  386.             if(_debug.verbose)
  387.             {
  388.                _debug.info(_buffer.utmv.toString(),VisualDebugMode.geek);
  389.             }
  390.             _debug.info("setVar( " + newVal + " )");
  391.             if(_takeSample())
  392.             {
  393.                variables = new Variables();
  394.                variables.utmt = "var";
  395.                _gifRequest.send(_account,variables);
  396.             }
  397.          }
  398.          else
  399.          {
  400.             _debug.warning("setVar \"" + newVal + "\" is ignored");
  401.          }
  402.       }
  403.       
  404.       public function setDomainName(newDomainName:String) : void
  405.       {
  406.          if(newDomainName == "auto")
  407.          {
  408.             _config.domain.mode = DomainNameMode.auto;
  409.          }
  410.          else if(newDomainName == "none")
  411.          {
  412.             _config.domain.mode = DomainNameMode.none;
  413.          }
  414.          else
  415.          {
  416.             _config.domain.mode = DomainNameMode.custom;
  417.             _config.domain.name = newDomainName;
  418.          }
  419.          _updateDomainName();
  420.          _debug.info("setDomainName( " + _config.domainName + " )");
  421.       }
  422.       
  423.       private function _updateDomainName() : void
  424.       {
  425.          var domainName:String = null;
  426.          if(_config.domain.mode == DomainNameMode.auto)
  427.          {
  428.             domainName = _info.domainName;
  429.             if(domainName.substring(0,4) == "www.")
  430.             {
  431.                domainName = domainName.substring(4);
  432.             }
  433.             _config.domain.name = domainName;
  434.          }
  435.          _config.domainName = _config.domain.name.toLowerCase();
  436.          _debug.info("domain name: " + _config.domainName,VisualDebugMode.advanced);
  437.       }
  438.       
  439.       public function addTrans(orderId:String, affiliation:String, total:Number, tax:Number, shipping:Number, city:String, state:String, country:String) : Object
  440.       {
  441.          _debug.warning("addTrans( " + [orderId,affiliation,total,tax,shipping,city,state,country].join(", ") + " ) not implemented");
  442.          return null;
  443.       }
  444.       
  445.       private function _renderMetricsSearchVariables(pageURL:String = "") : Variables
  446.       {
  447.          var campvars:Variables = null;
  448.          var variables:Variables = new Variables();
  449.          variables.URIencode = true;
  450.          var docInfo:DocumentInfo = new DocumentInfo(_config,_info,_formatedReferrer,pageURL,_adSense);
  451.          _debug.info("docInfo: " + docInfo.toURLString(),VisualDebugMode.geek);
  452.          if(_config.campaignTracking)
  453.          {
  454.             campvars = _campaignInfo.toVariables();
  455.          }
  456.          var browservars:Variables = _browserInfo.toVariables();
  457.          variables.join(docInfo.toVariables(),browservars,campvars);
  458.          return variables;
  459.       }
  460.       
  461.       public function setCampContentKey(newCampContentKey:String) : void
  462.       {
  463.          _config.campaignKey.UCCT = newCampContentKey;
  464.          var msg:* = "setCampContentKey( " + _config.campaignKey.UCCT + " )";
  465.          if(_debug.mode == VisualDebugMode.geek)
  466.          {
  467.             _debug.info(msg + " [UCCT]");
  468.          }
  469.          else
  470.          {
  471.             _debug.info(msg);
  472.          }
  473.       }
  474.       
  475.       private function _handleCookie() : void
  476.       {
  477.          var data0:* = null;
  478.          var data1:* = null;
  479.          var vid:Array = null;
  480.          var data2:* = null;
  481.          if(_config.allowLinker)
  482.          {
  483.          }
  484.          if(_buffer.hasUTMA() && !_buffer.utma.isEmpty())
  485.          {
  486.             if(!_buffer.hasUTMB() || !_buffer.hasUTMC())
  487.             {
  488.                _buffer.updateUTMA(_timeStamp);
  489.                _noSessionInformation = true;
  490.             }
  491.             if(_debug.verbose)
  492.             {
  493.                _debug.info("from cookie " + _buffer.utma.toString(),VisualDebugMode.geek);
  494.             }
  495.          }
  496.          else
  497.          {
  498.             _debug.info("create a new utma",VisualDebugMode.advanced);
  499.             _buffer.utma.domainHash = _domainHash;
  500.             _buffer.utma.sessionId = _getUniqueSessionId();
  501.             _buffer.utma.firstTime = _timeStamp;
  502.             _buffer.utma.lastTime = _timeStamp;
  503.             _buffer.utma.currentTime = _timeStamp;
  504.             _buffer.utma.sessionCount = 1;
  505.             if(_debug.verbose)
  506.             {
  507.                _debug.info(_buffer.utma.toString(),VisualDebugMode.geek);
  508.             }
  509.             _noSessionInformation = true;
  510.             _isNewVisitor = true;
  511.          }
  512.          if(Boolean(_adSense.gaGlobal) && _adSense.dh == String(_domainHash))
  513.          {
  514.             if(_adSense.sid)
  515.             {
  516.                _buffer.utma.currentTime = Number(_adSense.sid);
  517.                if(_debug.verbose)
  518.                {
  519.                   data0 = "";
  520.                   data0 += "AdSense sid found\n";
  521.                   data0 += "Override currentTime(" + _buffer.utma.currentTime + ") from AdSense sid(" + Number(_adSense.sid) + ")";
  522.                   _debug.info(data0,VisualDebugMode.geek);
  523.                }
  524.             }
  525.             if(_isNewVisitor)
  526.             {
  527.                if(_adSense.sid)
  528.                {
  529.                   _buffer.utma.lastTime = Number(_adSense.sid);
  530.                   if(_debug.verbose)
  531.                   {
  532.                      data1 = "";
  533.                      data1 += "AdSense sid found (new visitor)\n";
  534.                      data1 += "Override lastTime(" + _buffer.utma.lastTime + ") from AdSense sid(" + Number(_adSense.sid) + ")";
  535.                      _debug.info(data1,VisualDebugMode.geek);
  536.                   }
  537.                }
  538.                if(_adSense.vid)
  539.                {
  540.                   vid = _adSense.vid.split(".");
  541.                   _buffer.utma.sessionId = Number(vid[0]);
  542.                   _buffer.utma.firstTime = Number(vid[1]);
  543.                   if(_debug.verbose)
  544.                   {
  545.                      data2 = "";
  546.                      data2 += "AdSense vid found (new visitor)\n";
  547.                      data2 += "Override sessionId(" + _buffer.utma.sessionId + ") from AdSense vid(" + Number(vid[0]) + ")\n";
  548.                      data2 += "Override firstTime(" + _buffer.utma.firstTime + ") from AdSense vid(" + Number(vid[1]) + ")";
  549.                      _debug.info(data2,VisualDebugMode.geek);
  550.                   }
  551.                }
  552.                if(_debug.verbose)
  553.                {
  554.                   _debug.info("AdSense modified : " + _buffer.utma.toString(),VisualDebugMode.geek);
  555.                }
  556.             }
  557.          }
  558.          _buffer.utmb.domainHash = _domainHash;
  559.          if(isNaN(_buffer.utmb.trackCount))
  560.          {
  561.             _buffer.utmb.trackCount = 0;
  562.          }
  563.          if(isNaN(_buffer.utmb.token))
  564.          {
  565.             _buffer.utmb.token = _config.tokenCliff;
  566.          }
  567.          if(isNaN(_buffer.utmb.lastTime))
  568.          {
  569.             _buffer.utmb.lastTime = _buffer.utma.currentTime;
  570.          }
  571.          _buffer.utmc.domainHash = _domainHash;
  572.          if(_debug.verbose)
  573.          {
  574.             _debug.info(_buffer.utmb.toString(),VisualDebugMode.advanced);
  575.             _debug.info(_buffer.utmc.toString(),VisualDebugMode.advanced);
  576.          }
  577.       }
  578.       
  579.       public function setLocalServerMode() : void
  580.       {
  581.          _config.serverMode = ServerOperationMode.local;
  582.          _debug.info("setLocalServerMode()");
  583.       }
  584.       
  585.       public function clearIgnoredRef() : void
  586.       {
  587.          _debug.info("clearIgnoredRef()");
  588.          _config.organic.clearIgnoredReferrals();
  589.       }
  590.       
  591.       public function setCampSourceKey(newCampSrcKey:String) : void
  592.       {
  593.          _config.campaignKey.UCSR = newCampSrcKey;
  594.          var msg:* = "setCampSourceKey( " + _config.campaignKey.UCSR + " )";
  595.          if(_debug.mode == VisualDebugMode.geek)
  596.          {
  597.             _debug.info(msg + " [UCSR]");
  598.          }
  599.          else
  600.          {
  601.             _debug.info(msg);
  602.          }
  603.       }
  604.       
  605.       public function getLocalGifPath() : String
  606.       {
  607.          _debug.info("getLocalGifPath()");
  608.          return _config.localGIFpath;
  609.       }
  610.       
  611.       public function setLocalGifPath(newLocalGifPath:String) : void
  612.       {
  613.          _config.localGIFpath = newLocalGifPath;
  614.          _debug.info("setLocalGifPath( " + _config.localGIFpath + " )");
  615.       }
  616.       
  617.       public function getVersion() : String
  618.       {
  619.          _debug.info("getVersion()");
  620.          return _config.version;
  621.       }
  622.       
  623.       public function setAllowAnchor(enable:Boolean) : void
  624.       {
  625.          _config.allowAnchor = enable;
  626.          _debug.info("setAllowAnchor( " + _config.allowAnchor + " )");
  627.       }
  628.       
  629.       private function _isNotGoogleSearch() : Boolean
  630.       {
  631.          var domainName:String = _config.domainName;
  632.          var g0:* = domainName.indexOf("www.google.") < 0;
  633.          var g1:* = domainName.indexOf(".google.") < 0;
  634.          var g2:* = domainName.indexOf("google.") < 0;
  635.          var g4:* = domainName.indexOf("google.org") > -1;
  636.          return g0 || g1 || g2 || _config.cookiePath != "/" || g4;
  637.       }
  638.       
  639.       public function setSampleRate(newRate:Number) : void
  640.       {
  641.          if(newRate < 0)
  642.          {
  643.             _debug.warning("sample rate can not be negative, ignoring value.");
  644.          }
  645.          else
  646.          {
  647.             _config.sampleRate = newRate;
  648.          }
  649.          _debug.info("setSampleRate( " + _config.sampleRate + " )");
  650.       }
  651.       
  652.       private function _takeSample() : Boolean
  653.       {
  654.          if(_debug.verbose)
  655.          {
  656.             _debug.info("takeSample: (" + _visitCode() % 10000 + ") < (" + _config.sampleRate * 10000 + ")",VisualDebugMode.geek);
  657.          }
  658.          return _visitCode() % 10000 < _config.sampleRate * 10000;
  659.       }
  660.       
  661.       public function setCookiePath(newCookiePath:String) : void
  662.       {
  663.          _config.cookiePath = newCookiePath;
  664.          _debug.info("setCookiePath( " + _config.cookiePath + " )");
  665.       }
  666.       
  667.       public function setAllowHash(enable:Boolean) : void
  668.       {
  669.          _config.allowDomainHash = enable;
  670.          _debug.info("setAllowHash( " + _config.allowDomainHash + " )");
  671.       }
  672.       
  673.       private function _generateUserDataHash() : Number
  674.       {
  675.          var hash:String = "";
  676.          hash += _info.appName;
  677.          hash += _info.appVersion;
  678.          hash += _info.language;
  679.          hash += _info.platform;
  680.          hash += _info.userAgent.toString();
  681.          hash += _info.screenWidth + "x" + _info.screenHeight + _info.screenColorDepth;
  682.          hash += _info.referrer;
  683.          return Utils.generateHash(hash);
  684.       }
  685.       
  686.       public function setCampNOKey(newCampNOKey:String) : void
  687.       {
  688.          _config.campaignKey.UCNO = newCampNOKey;
  689.          var msg:* = "setCampNOKey( " + _config.campaignKey.UCNO + " )";
  690.          if(_debug.mode == VisualDebugMode.geek)
  691.          {
  692.             _debug.info(msg + " [UCNO]");
  693.          }
  694.          else
  695.          {
  696.             _debug.info(msg);
  697.          }
  698.       }
  699.       
  700.       public function addIgnoredOrganic(newIgnoredOrganicKeyword:String) : void
  701.       {
  702.          _debug.info("addIgnoredOrganic( " + newIgnoredOrganicKeyword + " )");
  703.          _config.organic.addIgnoredKeyword(newIgnoredOrganicKeyword);
  704.       }
  705.       
  706.       public function setLocalRemoteServerMode() : void
  707.       {
  708.          _config.serverMode = ServerOperationMode.both;
  709.          _debug.info("setLocalRemoteServerMode()");
  710.       }
  711.       
  712.       public function cookiePathCopy(newPath:String) : void
  713.       {
  714.          _debug.warning("cookiePathCopy( " + newPath + " ) not implemented");
  715.       }
  716.       
  717.       public function setDetectTitle(enable:Boolean) : void
  718.       {
  719.          _config.detectTitle = enable;
  720.          _debug.info("setDetectTitle( " + _config.detectTitle + " )");
  721.       }
  722.       
  723.       public function setCampTermKey(newCampTermKey:String) : void
  724.       {
  725.          _config.campaignKey.UCTR = newCampTermKey;
  726.          var msg:* = "setCampTermKey( " + _config.campaignKey.UCTR + " )";
  727.          if(_debug.mode == VisualDebugMode.geek)
  728.          {
  729.             _debug.info(msg + " [UCTR]");
  730.          }
  731.          else
  732.          {
  733.             _debug.info(msg);
  734.          }
  735.       }
  736.       
  737.       public function getServiceMode() : ServerOperationMode
  738.       {
  739.          _debug.info("getServiceMode()");
  740.          return _config.serverMode;
  741.       }
  742.       
  743.       private function _trackMetrics(pageURL:String = "") : void
  744.       {
  745.          var searchVariables:Variables = null;
  746.          var x10vars:Variables = null;
  747.          var generalvars:Variables = null;
  748.          var eventInfo:EventInfo = null;
  749.          if(_takeSample())
  750.          {
  751.             searchVariables = new Variables();
  752.             searchVariables.URIencode = true;
  753.             if(Boolean(_x10Module) && _x10Module.hasData())
  754.             {
  755.                eventInfo = new EventInfo(false,_x10Module);
  756.                x10vars = eventInfo.toVariables();
  757.             }
  758.             generalvars = _renderMetricsSearchVariables(pageURL);
  759.             searchVariables.join(x10vars,generalvars);
  760.             _gifRequest.send(_account,searchVariables);
  761.          }
  762.       }
  763.       
  764.       public function setCampaignTrack(enable:Boolean) : void
  765.       {
  766.          _config.campaignTracking = enable;
  767.          _debug.info("setCampaignTrack( " + _config.campaignTracking + " )");
  768.       }
  769.       
  770.       public function addIgnoredRef(newIgnoredReferrer:String) : void
  771.       {
  772.          _debug.info("addIgnoredRef( " + newIgnoredReferrer + " )");
  773.          _config.organic.addIgnoredReferral(newIgnoredReferrer);
  774.       }
  775.       
  776.       public function clearOrganic() : void
  777.       {
  778.          _debug.info("clearOrganic()");
  779.          _config.organic.clearEngines();
  780.       }
  781.       
  782.       public function getDetectFlash() : Boolean
  783.       {
  784.          _debug.info("getDetectFlash()");
  785.          return _config.detectFlash;
  786.       }
  787.       
  788.       public function setCampMediumKey(newCampMedKey:String) : void
  789.       {
  790.          _config.campaignKey.UCMD = newCampMedKey;
  791.          var msg:* = "setCampMediumKey( " + _config.campaignKey.UCMD + " )";
  792.          if(_debug.mode == VisualDebugMode.geek)
  793.          {
  794.             _debug.info(msg + " [UCMD]");
  795.          }
  796.          else
  797.          {
  798.             _debug.info(msg);
  799.          }
  800.       }
  801.       
  802.       private function _getUniqueSessionId() : Number
  803.       {
  804.          var sessionID:Number = (Utils.generate32bitRandom() ^ _generateUserDataHash()) * 2147483647;
  805.          _debug.info("Session ID: " + sessionID,VisualDebugMode.geek);
  806.          return sessionID;
  807.       }
  808.       
  809.       private function _getDomainHash() : Number
  810.       {
  811.          if(!_config.domainName || _config.domainName == "" || _config.domain.mode == DomainNameMode.none)
  812.          {
  813.             _config.domainName = "";
  814.             return 1;
  815.          }
  816.          _updateDomainName();
  817.          if(_config.allowDomainHash)
  818.          {
  819.             return Utils.generateHash(_config.domainName);
  820.          }
  821.          return 1;
  822.       }
  823.       
  824.       public function setSessionTimeout(newTimeout:int) : void
  825.       {
  826.          _config.sessionTimeout = newTimeout;
  827.          _debug.info("setSessionTimeout( " + _config.sessionTimeout + " )");
  828.       }
  829.       
  830.       public function getAccount() : String
  831.       {
  832.          _debug.info("getAccount()");
  833.          return _account;
  834.       }
  835.       
  836.       public function link(targetUrl:String, useHash:Boolean = false) : void
  837.       {
  838.          _debug.warning("link( " + [targetUrl,useHash].join(", ") + " ) not implemented");
  839.       }
  840.       
  841.       public function setRemoteServerMode() : void
  842.       {
  843.          _config.serverMode = ServerOperationMode.remote;
  844.          _debug.info("setRemoteServerMode()");
  845.       }
  846.    }
  847. }
  848.